import { hanzi2num } from "./hanzi2number";

// 九十四减去三十五的二倍除以二;
export function 汉字式子2表达式(语句: string): string {
  const dictionary: { [key: string]: string } = {
    等于: "=",
    加: "+",
    减: "-",
    减去: "-",
    乘: "*",
    "×": "*",
    x: "*",
    除以: "/", // 乘 后面 数的倒数
    除: "", // 前面数的倒数 除以 后面数
    "÷": "/",
    倍: "",

    平方: "**2",
    立方: "**3",
    次方: "",

    的: "",
    之: "",
    积: "",
    商: "",
  };

  let 表达式 = "";
  let 缓存 = "";
  const 语句长度减一 = 语句.length - 1;
  for (let index = 0; index < 语句长度减一; index++) {
    const 字 = 语句[index];
    const 下一个字 = 语句[index + 1];
    const 双字 = 字 + 下一个字;
    if (字 === "除" && 下一个字 !== "以") {
      表达式 += "1/" + 缓存 + "*";
      缓存 = "";
      continue;
    }
    if (字 === "倍") {
      // 表达式 += "*" + 缓存;
      表达式 = "(" + 表达式 + "*" + 缓存 + ")";
      缓存 = "";
      continue;
    }
    if (双字 === "次方") {
      表达式 += "**" + 缓存;
      缓存 = "";
      continue;
    }

    if (dictionary[双字] !== undefined && dictionary[双字] !== null) {
      index++;
      表达式 += 缓存;
      表达式 += dictionary[双字];
      缓存 = "";
    } else if (dictionary[字] !== undefined && dictionary[字] !== null) {
      表达式 += 缓存;
      表达式 += dictionary[字];
      缓存 = "";
    } else {
      缓存 += 字;
    }
  }
  表达式 += 缓存;
  表达式 += 语句[语句长度减一];

  const 值的数组 = 表达式
    .replace(/\(|\)/g, "")
    .split(/(\*\*)|(\+)|(\-)|(\*)|(\/)/g)
    .filter((v) => {
      if (v === undefined || v === null) {
        return false;
      }
      return true;
    });
  if (!值的数组) {
    return 表达式;
  }
  const 处理后的值的数组 = 值的数组.map((值) => {
    const 数字 = hanzi2num(值);
    if (isNaN(数字)) {
      return 值;
    }
    return 数字.toString();
  });
  for (let index = 0; index < 值的数组.length; index++) {
    const 值 = 值的数组[index];
    表达式 = 表达式.replace(值, 处理后的值的数组[index]);
  }

  return 表达式;
}
